package com.stylefeng.guns.rest.modular.user;

import com.alibaba.dubbo.config.annotation.Reference;
import com.stylefeng.guns.api.user.UserApi;
import com.stylefeng.guns.api.user.vo.UserInfoModel;
import com.stylefeng.guns.api.user.vo.UserModel;
import com.stylefeng.guns.core.response.ServerResponse;
import com.stylefeng.guns.rest.common.CurrentUser;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user/")
public class UserController {

    @Reference
    private UserApi userApi;


    /**
     * 用户注册方法
     * @param userModel     用户注册信息
     * @return
     */
    @RequestMapping(value = "register")
    public ServerResponse register(UserModel userModel) {
        if (userModel.getUsername() == null || userModel.getUsername().trim().length() == 0) {
            return ServerResponse.createByError("用户名不能为空");
        }
        if (userModel.getPassword() == null || userModel.getPassword().trim().length() == 0) {
            return ServerResponse.createByError("密码不能为空");
        }

        boolean isSuccess = userApi.register(userModel);
        if (isSuccess) {
            return ServerResponse.createBySuccess("注册成功");
        } else {
            return ServerResponse.createByError("注册失败");
        }
    }

    /**
     * 检查用户名是否已存在
     * @param username     用户名
     * @return
     */
    @RequestMapping(value = "check")
    public ServerResponse check(String username) {
        if (username != null && username.trim().length() > 0) {
            // 当返回true的时候，表示用户名可用
            boolean notExists = userApi.checkUsername(username);
            if (notExists) {
                return ServerResponse.createBySuccess("用户名不存在");
            } else {
                return ServerResponse.createByError("用户名已存在");
            }

        } else {
            return ServerResponse.createByError("用户名不能为空");
        }
    }

    /**
     * 注销
     * @return
     */
    @RequestMapping(value = "logout")
    public ServerResponse logout() {
        /*
            应用：
                1、前端存储JWT 【七天】 ： JWT的刷新
                2、服务器端会存储活动用户信息【30分钟】
                3、JWT里的userId为key，查找活跃用户
            退出：
                1、前端删除掉JWT
                2、后端服务器删除活跃用户缓存
            现状：
                1、前端删除掉JWT
         */


        return ServerResponse.createBySuccess("用户退出成功");
    }

    /**
     * 获取当前登录的“用户信息”
     * @return
     */
    @RequestMapping(value = "getUserInfo")
    public ServerResponse getUserInfo() {
        // 获取当前登陆用户
        String userId = CurrentUser.getCurrentUserId();
        if (userId != null && userId.trim().length() > 0) {
            // 将用户ID传入后端进行查询
            int uuid = Integer.parseInt(userId);
            UserInfoModel userInfo = userApi.getUserInfo(uuid);
            if (userInfo != null) {
                return ServerResponse.createBySuccess(userInfo);
            } else {
                return ServerResponse.createByError("用户信息查询失败");
            }
        } else {
            return ServerResponse.createByError("用户未登陆");
        }
    }

    /**
     * 更新用户信息
     * @param userInfoModel     修改的用户信息
     * @return
     */
    @RequestMapping(value = "updateUserInfo")
    public ServerResponse updateUserInfo(UserInfoModel userInfoModel) {
        // 获取当前登陆用户
        String userId = CurrentUser.getCurrentUserId();
        if (userId != null && userId.trim().length() > 0) {
            // 将用户ID传入后端进行查询
            int uuid = Integer.parseInt(userId);
            // 判断当前登陆人员的ID与修改的结果ID是否一致
            if (uuid != userInfoModel.getId()) {
                return ServerResponse.createByError("请修改您个人的信息");
            }

            UserInfoModel userInfo = userApi.updateUserInfo(userInfoModel);
            if (userInfo != null) {
                return ServerResponse.createBySuccess(userInfo);
            } else {
                return ServerResponse.createBySuccess("用户信息修改失败");
            }
        } else {
            return ServerResponse.createByError("用户未登陆");
        }
    }

}
